/*
 * @lc app=leetcode.cn id=26 lang=cpp
 *
 * [26] 删除有序数组中的重复项
 */

#include <limits.h>

#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;

// @lc code=start
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();        // 统计数组元素数量
        int slow = 0;               // 慢指针，记录无重复元素的数组下标

        // 如果数组为空，直接返回
        if (n == 0) {
            return 0;
        }

        // 快指针遍历数组元素
        for (int fast = 1; fast < n; fast++) {
            if (nums[fast] == nums[fast - 1]) {
                // 如果当前元素与前一个元素相同，则跳过
                continue;
            } else {
                // 如果当前元素与前一个元素不同，则移动慢指针并记录
                nums[++slow] = nums[fast];
            }
        }
        

        // 删除重复元素，即慢指针之后的元素
        for (int i = 0; i < n - slow - 1; i++) {
            nums.pop_back();
        }
        
        return slow + 1;
    }
};
// @lc code=end

